package com.xxl.job.executor.common.util;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTimeUtil {
	public static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";

	/***
	 * 将string字符串转化为Date类型的字符串
	 * 
	 * @param dateTimeStr
	 *            需要转化的string类型的字符串
	 * @param formatStr
	 *            转化规则
	 * @return 返回转化后的Date类型的时间
	 */
	public static Date strToDate(String dateTimeStr, String formatStr) {
		DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(formatStr);
		DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
		return dateTime.toDate();
	}

	/***
	 * 将date类型的时间转化为string类型
	 * 
	 * @param date
	 *            需要转化的date类型的时间
	 * @param formatStr
	 *            转化规则
	 * @return 返回转化后的string类型的时间
	 */
	public static String dateToStr(Date date, String formatStr) {
		if (date == null) {
			return StringUtils.EMPTY;
		}
		DateTime dateTime = new DateTime(date);
		return dateTime.toString(formatStr);
	}

	/***
	 * 将string字符串转化为Date类型的字符串
	 * 
	 * @param dateTimeStr
	 *            需要转化的string类型的时间
	 * @return 返回转化后的Date类型的时间
	 */
	public static Date strToDate(String dateTimeStr) {
		DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT);
		DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
		return dateTime.toDate();
	}

	/***
	 * 将date类型的时间转化为string类型
	 * 
	 * @param date
	 *            需要转化的date类型的时间
	 * @return 返回转化后的string类型的时间
	 */
	public static String dateToStr(Date date) {
		if (date == null) {
			return StringUtils.EMPTY;
		}
		DateTime dateTime = new DateTime(date);
		return dateTime.toString(STANDARD_FORMAT);
	}

	
    public static Timestamp getTimeStamp(String dataStr) throws ParseException {
        Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse(dataStr);
        return new Timestamp(date.getTime());
    }

    public static Timestamp getTimeStampNoMillSecondFormat(String dataStr) throws ParseException {
        Date date = new SimpleDateFormat("yyyyMMddHHmmss").parse(dataStr);
        return new Timestamp(date.getTime());
    }
    
    public static Timestamp getTimeStampFormat(String dataStr) throws ParseException {
    	Date date = new SimpleDateFormat("yyyyMMddHHmmssSSS").parse(dataStr);
    	return new Timestamp(date.getTime());
    }
    
    public static String getNowTimeStampFormat(){
    	DateTime now = DateTime.now();
    	return now.toString("yyyyMMddHHmmssSSS");
    }
    
    public  static Timestamp getNowTimestamp() {
        return new Timestamp(System.currentTimeMillis());
    }
	
	public static void main(String[] args) {
		System.out.println(DateTimeUtil.getNowTimeStampFormat());

	}

}
